package com.linkgie.galaxyframework.metadata.structure;

import com.linkgie.galaxyframework.metadata.DataEntity;
import com.linkgie.galaxyframework.metadata.DataField;
import com.linkgie.galaxyframework.metadata.DataInterface;
import com.linkgie.galaxyframework.metadata.DataKey;
import com.linkgie.galaxyframework.metadata.DataType;
import com.linkgie.galaxyframework.metadata.IteratorOperation;

@DataInterface
@DataEntity
public class StateBindingMetadata {

	/**
	 * 字段绑定的状态名称；
	 * 
	 * @return
	 */
	@DataKey
	@DataField(name = "状态", order=0)
	private String state;
	
	/**
	 * 是否绑定字段的可见性；
	 * <p>
	 * 默认为 true ；
	 * <p>
	 * 
	 * 当设置为 true 时， {@link #visible()} 才生效；
	 * 
	 * @return
	 */
	@DataType(contentType = "enum;strict=true;true='启用';false='禁用'")
	@DataField(name = "绑定可见性", order=1)
	private boolean enableVisible = true;

	/**
	 * 处于绑定状态下时，字段是否可见；
	 * <p>
	 * 默认为 true ；
	 * <p>
	 * 
	 * 当 {@link #enableVisible()} 设置为 true 时， {@link #visible()} 才生效；
	 * 
	 * @return
	 */
	@DataType(contentType = "enum;strict=true;true='显示';false='隐藏'")
	@DataField(name = "可见性", order=2)
	private boolean visible=true;

	/**
	 * 是否绑定字段的只读；
	 * <p>
	 * 默认为 false ；
	 * <p>
	 * 当设置为 true 时， {@link #readonly()} 才生效；
	 * 
	 * @return
	 */
	@DataType(contentType = "enum;strict=true;true='启用';false='禁用'")
	@DataField(name = "绑定只读", order=10)
	private boolean enableReadonly = false;
	
	/**
	 * 处于绑定状态下时，字段是否只读；
	 * <p>
	 * 默认为 false ；
	 * <p>
	 * 当 {@link #enableReadonly()} 设置为 true 时， {@link #readonly()} 才生效；
	 * 
	 * @return
	 */
	@DataType(contentType = "enum;strict=true;true='只读';false='可写'")
	@DataField(name = "只读", order=11)
	private boolean readonly = false;
	

	@DataType(contentType = "enum;strict=true;true='启用';false='禁用'")
	@DataField(name = "绑定列表操作", order=10)
	private boolean enableIterates = false;
	
	/**
	 * 当字段为可迭代类型时，支持的对字段的数据列表的操作；
	 * 
	 * <p>
	 * 默认支持增加(Add)、修改(Update)、删除(Delete)操作；
	 * 
	 * @return
	 */
	@DataField(name = "列表操作", order = 21)
	private IteratorOperation[] iterates = new IteratorOperation[] { IteratorOperation.ADD, IteratorOperation.UPDATE,
			IteratorOperation.DELETE };
	

	public String getState() {
		return state;
	}

	public void setState(String state) {
		this.state = state;
	}

	public boolean isVisible() {
		return visible;
	}

	public void setVisible(boolean visible) {
		this.visible = visible;
	}

	public boolean isEnableVisible() {
		return enableVisible;
	}

	public void setEnableVisible(boolean enableVisible) {
		this.enableVisible = enableVisible;
	}

	public boolean isReadonly() {
		return readonly;
	}

	public void setReadonly(boolean readonly) {
		this.readonly = readonly;
	}

	public boolean isEnableReadonly() {
		return enableReadonly;
	}

	public void setEnableReadonly(boolean enableReadonly) {
		this.enableReadonly = enableReadonly;
	}
	
}
